/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.medical.util;

import com.ec.medical.enumeracion.DiasSemanaEnum;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 *
 * @author Administrador
 */
public class Utilitarios {
   public static final String DD_MM_YY = "dd/M/yy";
    public static final String DD_MM_YYYY = "dd/M/yyyy";
    public static final String HH_MM ="HH:mm";
     public static final String DD_MM_YYYY_HH_MM = "dd/M/yyyy HH:mm";

    /**
     * Metodo que valida si un String es nulo o vacio
     *
     * @param valor
     * @return
     */
    public static boolean esNuloOVacio(String valor) {
        return esNulo(valor) || valor.trim().length() == 0;
    }

    /**
     * Metodo que valida si un objto es nulo
     *
     * @param valor
     * @return
     */
    public static boolean esNulo(Object valor) {
        return valor == null;
    }

    /**
     * metodo que valida si un byte[] es nullo o vacio
     *
     * @param byte[] array
     * @return
     */
    public static boolean esNuloOVacio(byte[] array) {
        return array == null || array.length == 0;

    }

    /**
     * recupera el dia de la semana de una determinada fecha
     *
     * @param fecha
     * @return
     */
    public static DiasSemanaEnum obtenerDiaAPartirDeFecha(Date fecha) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        DiasSemanaEnum diaSemanaEnum = null;
        int dia = cal.get(Calendar.DAY_OF_WEEK);

        switch (dia) {
            case (Calendar.MONDAY):
                diaSemanaEnum = DiasSemanaEnum.LUNES;
                break;
            case (Calendar.TUESDAY):
                diaSemanaEnum = DiasSemanaEnum.MARTES;
                break;
            case (Calendar.WEDNESDAY):
                diaSemanaEnum = DiasSemanaEnum.MIERCOLES;
                break;
            case (Calendar.THURSDAY):
                diaSemanaEnum = DiasSemanaEnum.JUEVES;
                break;
            case (Calendar.FRIDAY):
                diaSemanaEnum = DiasSemanaEnum.VIERNES;
                break;
            case (Calendar.SATURDAY):
                diaSemanaEnum = DiasSemanaEnum.SABADO;
                break;
            case (Calendar.SUNDAY):
                diaSemanaEnum = DiasSemanaEnum.DOMINGO;
                break;

        }
        return diaSemanaEnum;
    }

    /**
     * recupera la hora de una fecha, hora de 0 - 11
     *
     * @param fecha
     * @return
     */
    public static int obtenerHoraAmPm(Date fecha) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        return cal.get(Calendar.HOUR);
    }

    /**
     * recupera la hora de una fecha, hora de 0 - 24
     *
     * @param fecha
     * @return
     */
    public static int obtenerHora(Date fecha) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        return cal.get(Calendar.HOUR_OF_DAY);
    }

    /**
     * recupera los minutos de una fecha
     *
     * @param fecha
     * @return
     */
    public static int obtenerMinutos(Date fecha) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        return cal.get(Calendar.MINUTE);
    }

    /**
     * obtiene el Time de una fecha dada
     *
     * @param fecha
     * @return
     */
    public static Time obtenerTime(Date fecha) {
        Time time = new Time(fecha.getTime());
        return time;
    }

    /**
     * obtiene el objeto Calendar de una fecha dada
     *
     * @param fecha
     * @return
     */
    public static Calendar obtenerCalendarDeFecha(Date fecha) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        return cal;
    }

    /**
     * Metodo que retorna la fecha con horas, minutos y segundos cero
     * @param fecha
     * @return
     */
    public static Date obtenerFechaSinHoras(Date fecha) {
        Calendar cal = obtenerCalendarDeFecha(fecha);
        cal.set(Calendar.HOUR, 0);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return cal.getTime();
    }
    
    
    /**
     * Metodo que suma o resta fechas a una fecha
     * @param fecha
     * @param cantidad
     * @return
     */
    public static Date sumarDiasAFecha(Date fecha,int cantidad){
         Calendar cal = obtenerCalendarDeFecha(fecha);
        cal.add(Calendar.DAY_OF_MONTH, cantidad);
        return cal.getTime();
    }
    
    
    /**
     * Formatea un Date con el formato enviado
     * @param fecha
     * @param pattern
     * @return
     */
    public static String obtenerFechaFormateada(Date fecha, String pattern){
        SimpleDateFormat sdf = new SimpleDateFormat(pattern);
        return sdf.format(fecha);
    }
}
